#pragma once

/// <summary>
/// Interface for mesh objects
/// <summary>

/**	Author: Dane Bulat
  * Created: 06/2013
  * Last Modified: 30/06/2013
  * Version: v1.0
  */

#include <D3D11.h>
#include <xnamath.h>

#include "common/LightHelper.h"
#include "common/d3dUtil.h"
#include "common/MathHelper.h"
#include "common/xnacollision.h"

#include <string>
using namespace std;

class IMesh
{
public:
	virtual ~IMesh() { }

	virtual void SetTranslation(const float tx, const float ty, const float tz) = 0;

	virtual XMFLOAT3 GetTranslation() const = 0;

	virtual void SetRotation(const float rx, const float ry, const float rz) = 0;

	virtual void SetScale(const float sx, const float sy, const float sz) = 0;

	virtual void SetTexTransform(const float sx, const float sy, const float sz) = 0;

	virtual void SetMaterial(Material* mat) = 0;

	virtual void SetDiffuseMap(ID3D11ShaderResourceView* diffuse_map) = 0;

	virtual void SetVertexBuffer(ID3D11Buffer* vb) = 0;

	virtual void SetIndexBuffer(ID3D11Buffer* ib) = 0;

	virtual void Update(float dt) = 0;

	virtual void Draw(ID3D11DeviceContext* device_context, XMMATRIX& view, XMMATRIX& proj) = 0;

	virtual void EnableTexture(bool enable) = 0;

	virtual void SetAABB(XNA::AxisAlignedBox* aabb) = 0;	

	virtual XNA::AxisAlignedBox* GetAABB() const = 0;

	virtual string& GetID() = 0;

	virtual void SetID(const string& id) = 0;
};